// 基础类型
(() => {
  //布尔类型
  let flag: boolean = true;
  flag = false;
  //   flag =10;
  console.log(flag);
  //数字
  let a1: number = 10; // 十进制
  let a2: number = 0b1010; // 二进制
  let a3: number = 0o12; // 八进制
  let a4: number = 0xa; // 十六进制
  console.log(a1, a2, a3, a4);
  //字符串
  let str1: string = "床前明月光";
  let str2: string = "疑是地上霜";
  let str3: string = "下雨";
  let str4: string = "大于";
  console.log(str1, str2, str3, str4);
  //undefined null
  let und: undefined = undefined;
  let nul: null = null;
  console.log(und, nul);
  //   let num2:number = undefined
  let num2: number = null;
  console.log(num2);
  //数组
  //数组定义方式1
  let arr1: number[] = [1, 2, 3];
  console.log(arr1);
  //数组定义方式2:泛型写法
  let arr2: Array<number> = [14, 5, 6];
  console.log(arr2);
  //元组类型: 在定义数组的时候,类型和个数一开始就限定了  数据类型的位置和个数应该和定义元组的时候一致
  let arr3: [string, number, boolean] = ["小甜甜", 100, true];
  console.log(arr3);
  //枚举类型  枚举里面的每一个数据都可以叫做元素,每一个元素都有自己的编号  编号是从0开始的  依次递增1
  enum Color {
    red,
    green,
    blue,
  }
  let color: Color = Color.red;
  console.log(color);
  console.log(Color.red, Color.green, Color.blue);
  console.log(Color[2]);
  enum Gender {
    女,
    男,
  }
  console.log(Gender.男);
  //any类型
  let str: any = 100;
  str = "小雨";
  console.log(str);
  //当一个数组中要存储多个数据 类型不确定  个数不确定 此时使用any类型
  let arr: any[] = [100, "大于", true];
  console.log(arr);
  //void   在函数声明的时候  小括号的后面使用 void代表的是该函数没有任何的返回值
  function showMsg(): void {
    console.log("void无效的");
    return null;
  }
  console.log(showMsg());
  //object类型
  function getObj(obj:object):object {
      console.log(obj);
      return {
          name:'小雨',
          age:18
      }
      
  }
  console.log(getObj({name:'大于'}));
  //联合类型  类型断言
  //类型断言: 告诉浏览器我知道自己是什么类型 方式1 : (<类型>变量).length  方式2 :  值as类型
  function getString(str:number | string) {
    //   return str.toString().length
    if((<string>str).length) {
        return (str as string).length
    }else {
        return str.toString().length
    }
  }
  console.log(getString(1222));
  //类型推断   在没有指定类型的时候推车出类型
  let txt = 100
  txt=200
  console.log(txt);
  let txt2
  console.log(txt2);
  txt2 = '注册'
  txt2  = 100
  console.log(txt2);
  
  
  
})();
